草庐IT

C++ inline

全部标签

c++ - libgcc_s.so 在同一进程中静态和动态链接是否正常?

我的应用引入了许多共享库。有些是用C++编写的,它会引入libstdc++.so,而后者会引入libgcc_s.so。还有一些是用纯C语言编写的,并与-static-libgcc链接。所以现在我有一些libgcc静态链接在多个共享库中,而libstdc++在运行时动态加载其他libgcc。Q1:这个设置会给我带来什么麻烦吗?libgcc是否具有会使这种混合链接出现问题的内部状态,或者它只是内联函数?问题2:为了让我的应用程序在旧版Linux上运行,我应该发布libstdc++.so和libgcc_s.so并在主exe上使用rpath来加载它。这是正确的做法吗?

c - 使用 __attribute__ ((section "STACK")) 将变量准确地放在 ("STACK"部分中可能有什么意义?

Ingccdoc给出了使用section的一个原因。这个原因是映射到特殊硬件。但这似乎不是我的情况。所以我给了一个任务来修改我们在项目中使用的共享库。它是一个Linux库。库中有变量声明让我感到困惑。它们看起来像这样(大致):staticintmy_var_1__attribute__((section("STACK")))=0;更新1:有十几个变量以这种方式定义(__attribute__((section("STACK"))))更新2:my_var_1不是常量。my_var_1可能会在初始化期间更改代码:my_var_1=atoi(getenv("MY_VAR_1")?getenv

c - 使用 __attribute__ ((section "STACK")) 将变量准确地放在 ("STACK"部分中可能有什么意义?

Ingccdoc给出了使用section的一个原因。这个原因是映射到特殊硬件。但这似乎不是我的情况。所以我给了一个任务来修改我们在项目中使用的共享库。它是一个Linux库。库中有变量声明让我感到困惑。它们看起来像这样(大致):staticintmy_var_1__attribute__((section("STACK")))=0;更新1:有十几个变量以这种方式定义(__attribute__((section("STACK"))))更新2:my_var_1不是常量。my_var_1可能会在初始化期间更改代码:my_var_1=atoi(getenv("MY_VAR_1")?getenv

c++ - SIGPROF 在使用 google perftools 时杀死了我的服务器

我有一个用C/C++编写的多线程服务器进程,我正尝试使用Googleperftools对其进行分析。但是,当我使用perftools运行该过程时,我的服务器很快就会因“系统调用中断”错误而停止,我认为这是由传入的SIGPROF引起的。(被中断的实际系统调用在我对zmq_recv的调用的深处,但我认为它是哪一个并不重要。)这是预期的行为吗?我应该以某种方式明确处理这种情况吗?或者这里出了什么问题? 最佳答案 根据zmq_recv()的zeroMQ文档,我们可以预期如果在信号进行时收到信号,它会返回EINTR。在zmq_recv()调用

c++ - SIGPROF 在使用 google perftools 时杀死了我的服务器

我有一个用C/C++编写的多线程服务器进程,我正尝试使用Googleperftools对其进行分析。但是,当我使用perftools运行该过程时,我的服务器很快就会因“系统调用中断”错误而停止,我认为这是由传入的SIGPROF引起的。(被中断的实际系统调用在我对zmq_recv的调用的深处,但我认为它是哪一个并不重要。)这是预期的行为吗?我应该以某种方式明确处理这种情况吗?或者这里出了什么问题? 最佳答案 根据zmq_recv()的zeroMQ文档,我们可以预期如果在信号进行时收到信号,它会返回EINTR。在zmq_recv()调用

c - 共享库注入(inject): _dl_relocate_object segfaults

我最近在Linux中尝试共享库注入(inject),并决定编写自己的程序来执行此操作(而不是使用GDB来注入(inject)库)。我的程序使用pthread用汇编代码覆盖加载程序程序(0x40000-0x400025)的前0x25个字节,为文件名分配空间并调用dlopen。完成所有这些后,它会恢复程序状态并从中分离。程序集如下:globalinject_libraryglobalnullsubsection.datasection.textinject_library:;rdi->Pointertomalloc();rsi->Pointertofree();rdx->Pointerto

c - 共享库注入(inject): _dl_relocate_object segfaults

我最近在Linux中尝试共享库注入(inject),并决定编写自己的程序来执行此操作(而不是使用GDB来注入(inject)库)。我的程序使用pthread用汇编代码覆盖加载程序程序(0x40000-0x400025)的前0x25个字节,为文件名分配空间并调用dlopen。完成所有这些后,它会恢复程序状态并从中分离。程序集如下:globalinject_libraryglobalnullsubsection.datasection.textinject_library:;rdi->Pointertomalloc();rsi->Pointertofree();rdx->Pointerto

c - 为 `MSG_MORE` 标记的数据包刷新内核的 TCP 缓冲区

发送()的manpage显示MSG_MORE标志,该标志被断言其行为类似于TCP_CORK。我有一个围绕send()的包装函数:intSocketConnection_Write(SocketConnection*this,void*buf,intlen){errno=0;intsent=send(this->fd,buf,len,MSG_NOSIGNAL);if(errno==EPIPE||errno==ENOTCONN){throw(exc,&SocketConnection_NotConnectedException);}elseif(errno==ECONNRESET){thr

c - 为 `MSG_MORE` 标记的数据包刷新内核的 TCP 缓冲区

发送()的manpage显示MSG_MORE标志,该标志被断言其行为类似于TCP_CORK。我有一个围绕send()的包装函数:intSocketConnection_Write(SocketConnection*this,void*buf,intlen){errno=0;intsent=send(this->fd,buf,len,MSG_NOSIGNAL);if(errno==EPIPE||errno==ENOTCONN){throw(exc,&SocketConnection_NotConnectedException);}elseif(errno==ECONNRESET){thr

c - 防止 gcc 内联函数

这个问题在这里已经有了答案:HowcanItellgccnottoinlineafunction?(8个答案)关闭7年前。是否可以防止gcc编译器内联特定函数。如果是这样,如何?不要告诉我降低优化级别。我想要所有的优化,但是标记一个特定的函数不被编译器内联,就像变量的volatile一样。我想这样做的原因是因为我的函数使用内联汇编定义的标签,当gcc内联函数时,gcc搞砸了,因为内联导致gcc创建该标签的多个实例。